/**
* 演示类的设计：钟表类
* 角色：类的设计者。
* @author 陈彬
* @date 2021-3-30
*/
public class Clock {
	
	/**
	* 成员变量：时分秒针的数据
	* 通过private加"表盖"，保护指针不被直接接触
	*/
	private int hour;
	private int minute;
	private int second;

	/**
	* 无参数的构造方法，用默认值在初始化
	*/
	public Clock(){
		// hour = 10;
		// minute = 10;
		// 调用两个int参数的构造方法
		this(10, 10);
	}

	/**
	* 如果需要从外界获取数据来初始化。例如客户定制手表会提特殊要求。
	*/
	public Clock(int hour, int minute) {
		// 方法内部声明的变量，同方法的参数一样，都是局部变量，作用域仅限方法内部访问
		int tmp;
		// 等号左右两个变量，都是局部变量， 并没有对成员变量的hour赋值，
		// 所以它使用的是默认值0
		// hour = hour;
		// minute = minute;
		// 用this关键字来引用当前对象的成员变量，从而解决作用域冲突的问题
		this.hour = hour;
		this.minute = minute;
	}

	/**
	* 成员方法：显示钟表时间的行为
	*/
	public void showTime(){
		System.out.println(hour + ":" + minute + ":" + second);
	}

	// 以下是跟private变量一一对应的封装方法
	// 通过public方法加"表冠"，提供给使用者访问的接口
	public void setHour(int hour) {
		// 比直接对成员变量赋值更友好的地方，还在于可以对数据做校验
		if(hour < 0 || hour > 23) {
			// 错误处理（后面会学习异常机制）
			System.out.println("时间范围出错");
		} else {
			this.hour = hour;
		}
		
	}

	public void setMinute(int minute) {
		// 此处添加分针的业务规则
		this.minute = minute;
	}

	public void setSecond(int second) {
		// 此处添加秒针的业务规则
		this.second = second;
	}
}